﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class descuentoController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /descuento/

        public ActionResult Index(int id)
        {

            var query = entidades.GetDescuentoById(id).ToList();
            return Json(new { grid = query, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        //
        public string mesencadena(int id)
        {
            var mes = "";
            switch (id)
            {
                case 1: mes = "Enero"; break;
                case 2: mes = "Febrero"; break;
                case 3: mes = "Marzo"; break;
                case 4: mes = "Abril"; break;
                case 5: mes = "Mayo"; break;
                case 6: mes = "Junio"; break;
                case 7: mes = "Julio"; break;
                case 8: mes = "Agosto"; break;
                case 9: mes = "Setiembre"; break;
                case 10: mes = "Octubre"; break;
                case 11: mes = "Noviembre"; break;
                case 12: mes = "Diciembre"; break;

            }
            return mes;
        }

        //
        // GET: /descuento/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /descuento/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /descuento/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, PRESTADELDSCTO PRESTADELDSCTO)
        {
            try
            {

                // TODO: Add insert logic here
                int idpersonal = Convert.ToInt32(Request.Params["idpersonal"]);

                var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                #region
                /* //OBTENEMOS EL AREA DEL PERSONAL
                //var posper = entidades.POSICIONPERSONAs
                //    .Join(entidades.POSICIONs, posp => posp.IdPosicion, pos => pos.IdPosicion, (posp, pos) => new
                //    {
                //        posp.estado,
                //        posp.IdPersonal,
                //        pos.IdArea
                //    })
                //    .Single(posp => posp.estado == true && posp.IdPersonal == idpersonal);

                //JEFE DE AREA
                //var jea = entidades.POSICIONPERSONAs
                //    .Join(entidades.POSICIONs, posp => posp.IdPosicion, pos => pos.IdPosicion, (posp, pos) => new
                //    {
                //        posp.estado,
                //        pos.IdCargo,
                //        pos.IdArea,
                //        posp.IdPersonal
                //    })
                //    .Single(posp => posp.estado == true && posp.IdCargo == 5 && posp.IdArea == posper.IdArea);
                */
                #endregion
                try
                {
                    if (ModelState.IsValid)
                    {
                        var cadelanto = new PRESTADELDSCTO();
                        cadelanto.tipo = 3;
                        cadelanto.aprobado = false;
                        //PROBANDO
                        var query = entidades.PERIODOLABORALs
                            .Where(pr => pr.IdPersonal == idpersonal)
                            .Where(pr => pr.IdMotivoFinDePeriodo == null)
                            .ToList();
                        //PROBANDO
                        int IdPeriodoLaboral = Convert.ToInt32(query[0].IdPeriodoLaboral.ToString());
                        cadelanto.IdPeriodoLaboral = IdPeriodoLaboral;
                        collection["IdPeriodoLaboral"] = Convert.ToString(IdPeriodoLaboral);
                        ////////

                        cadelanto.Fechasolicitud = DateTime.Now;
                        TryUpdateModel(cadelanto, collection.ToValueProvider());
                        entidades.AddToPRESTADELDSCTOes(cadelanto);
                        entidades.SaveChanges();
                        try
                        {
                            entidades.RDISTRIBUIRCUOTAS(cadelanto.cuotas, Convert.ToInt32(cadelanto.IdPrestAdelDscto), cadelanto.monto, Convert.ToInt32(ejm.idejerciciomes));
                            return Content("OK");

                        }
                        catch {

                            return Content("Se produjo un error");                        
                        
                        }                  
                    }

                    return View();
                }
                catch (Exception ex)
                {
                    return Content(ex.Message);
                }
            }
            catch
            {
                return Content("Error No tieme Mes Vigente Activo");
            }
        }
        
        //
        // GET: /descuento/Edit/5
 
        public ActionResult Edit(int id)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto ==  id);
            return View(edescuento);
        }

        //
        // POST: /descuento/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);
                    TryUpdateModel(edescuento);
                    entidades.SaveChanges();
                    entidades.RDISTRIBUIRCUOTAS(edescuento.cuotas, Convert.ToInt32(edescuento.IdPrestAdelDscto), edescuento.monto, Convert.ToInt32(ejm.idejerciciomes));
                    return Content("OK");
                }
                return View(edescuento);
            }
            catch
            {
                return View(edescuento);
            }
        }

        //
        // GET: /descuento/Edit/5

        public ActionResult Aprobar(int id)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(edescuento);
        }

        //
        // POST: /descuento/Edit/5
    /*    public ActionResult Aprobar(int id)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(edescuento);
        }
        */

        [HttpPost]
        public ActionResult Aprobar(int id, FormCollection collection, HttpPostedFileBase adjunto)
        {

            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            int autorizador = Convert.ToInt32(collection["autorizador"]);

            //return Content(autorizador.ToString());

            if (autorizador > 0)
            {

                try
                {
                    // TODO: Add update logic here
                    if (ModelState.IsValid)
                    {
                        string grupos = "";
                        if (adjunto != null)
                        {
                            grupos = adjunto.FileName.ToString();
                            if (grupos.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                            {
                                adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Descuento/") + Convert.ToString(edescuento.IdPrestAdelDscto) + ".pdf");
                            }
                            else
                            {
                                ViewData["ERRORDSCTO"] = "Seleccione Documento PDF";
                                return View(edescuento);
                            }
                        }
                        /*else
                        {
                            ViewData["ERRORDSCTO"] = "Es Necesario Adjuntar Documento De Sustento";
                            return View(edescuento);
                        }*/

                        edescuento.aprobado = true;
                        edescuento.Fechaaprobacion = DateTime.Now;
                        edescuento.AutorizadoPor = Convert.ToInt32(autorizador);

                        TryUpdateModel(edescuento);
                        entidades.SaveChanges();
                        return Content("OK");
                    }
                    return Content("Datos Invalidos");
                    //return View(edescuento);
                }
                catch
                {
                    return Content("Error procesando los datos");

                    //return View(edescuento);
                }
            }
            else
            {
                //ViewData["ERRORDSCTO"] = "Error en el envio de datos";
                return Content("Error en el envio de datos");
            }
        }

        //
        // GET: /descuento/Delete/5
 /*
        public ActionResult Delete(int id)
        {
            return View();
        }
        */
        //
        // POST: /descuento/Delete/5

        public ActionResult Delete(int id, FormCollection collection)
        {
            string strResponse = String.Empty;
            var ecuota = entidades.PRESTADELDSCTOes.Single(e => e.IdPrestAdelDscto == id);

            try
            {
                if (ecuota != null)
                {
                    entidades.PRESTADELDSCTOes.DeleteObject(ecuota);
                    entidades.SaveChanges();
                    return Content("OK");
                }
                return Content("Error");
            }
            catch (Exception e)
            {
                strResponse = "{success: false,msg:'" + e.Message + "'}";
                return Content(strResponse);
            }
        }
    }
}
